package com.hsy.raffle.service.impl;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.hsy.raffle.dao.RaffleDao;
import com.hsy.raffle.entity.Raffle;
import com.hsy.raffle.service.RaffleService;
import com.hsy.raffle.vo.R;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

/**
 * 抽奖表(Raffle)表服务实现类
 *
 * @author makejava
 * @since 2023-05-08 16:00:23
 */
@Service("raffleService")
public class RaffleServiceImpl  implements RaffleService {

    @Resource
    private RaffleDao dao;


    @Override
    public R save(String token) {
        // 验证参数
        if (StringUtils.hasLength(token)) {
            // 通过令牌获取用户id
            int uid = Integer.parseInt(token);
            // 验证是否可以抽奖， 每日 每个用户 只能抽一次
            Raffle raffle = dao.selectLast(uid);
            if (raffle!=null) {
                // 校验今日是否可以抽奖
                SimpleDateFormat sdf = new SimpleDateFormat("yy-MM-dd");
                if (sdf.format(raffle.getCtime()).equals(sdf.format(new Date()))) {
                    return R.fail("今日已抽奖");
                }
            }
            // 可抽奖
            Random random = new Random();
            int r = random.nextInt(20) + 1;
            // 组装抽奖对象
            raffle=new Raffle(uid,r>6?"未中奖":r+"等奖",r,new Date());
            if (dao.insert(raffle) > 0) {
                return R.ok(raffle);
            }
        }
        return R.fail("抽奖失败，网络异常");
    }

    @Override
    public R queryByUid(String token) {
        LambdaQueryWrapper<Raffle> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(Raffle::getUid, token);
        wrapper.orderByDesc(Raffle::getCtime);
        return R.ok(dao.selectList(wrapper));
    }

    @Override
    public R check(String token) {
        //1.验证 参数
        if(StringUtils.hasLength(token)) {
            //2.通过令牌获取用户id
            int uid = Integer.parseInt(token);
            //3.验证是否可以抽奖 每日，每个用户，只能抽1次
            Raffle raffle = dao.selectLast(uid);
            if (raffle != null) {
                //校验 今日是否可以签到
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                if (sdf.format(raffle.getCtime()).equals(sdf.format(new Date()))) {
                    return R.fail("亲，你今日的抽奖次数已用完！");
                }
            }
            return R.ok();
        }
        return R.fail("亲，网络异常，请重试！");
    }

    @Override
    public R queryAll() {
        return R.ok(dao.selectList(null));
    }
}

